﻿using System;
using System.Collections.Generic;

namespace Validate.Net.Core
{
    /// <summary>
    /// 自定义提示语
    /// <para>可以对所有 <see cref="ValidateBaseAttribute"/> 进行提示语的配置</para>
    /// </summary>
    public class CustomPrompts
    {
        private static readonly Dictionary<Type, string> propmts = new Dictionary<Type, string>();

        /// <summary>
        /// 设置指定特性的 自定义提示语。
        /// </summary>
        /// <typeparam name="T">指定要替换提示语的特性</typeparam>
        /// <param name="prompts">自定义提示语。优先级高于默认提示语但低于内联提示语
        /// <list type="bullet">
        /// <item>提示语只描述校验失败的原因，而不应该包含其他内容。（ 例如 : 不能是默认值、必须填写 等等类似的语句 )</item>
        /// <item>若没有内联提示语时，此提示语将替换默认的提示语</item>
        /// <item>提示语优先级: <see cref="ValidateBaseAttribute.InternalPrompts"/> > <see cref="CustomPrompts.Set{T}(string)"/> > <see cref="ValidateBaseAttribute.Prompts"/></item>
        /// </list>
        /// </param>
        public void Set<T>(string prompts) where T : ValidateBaseAttribute
        {
            if (string.IsNullOrWhiteSpace(prompts))
            { return; }

            if (propmts.ContainsKey(typeof(T)))
            { propmts[typeof(T)] = prompts; }
            else
            { propmts.Add(typeof(T), prompts); }
        }

        internal string Get(Type type)
        {
            if (propmts.ContainsKey(type))
            { return propmts[type]; }
            else { return null; }
        }
    }
}
